// 收集依赖，收集订阅者
class Dep{
     constructor() {
         //这个sub数组，用来存放订阅者信息
         this.subs = []
     }
     addSub(watcher){
         //向subs数组中，添加订阅者信息
         this.subs.push(watcher)
     }
     notify() {
         // 发布通知的方法
         this.subs.forEach(watcher => {
             watcher.update();
         })
     }
}
// 订阅者类
class Watcher{
     constructor(cb) {
         this.cb = cb; // 将cb函数挂载在自己身上
     }

     update() {
        this.cb(); //调用自己的cb函数
     }
}
const w1 = new Watcher(() => {
    console.log("我是订阅者1");// 创建函数cb，作为创建一个Watcher实例的必备参数
})
const w2 = new Watcher(() => {
    console.log("我是订阅者2");
})

const dep = new Dep();
dep.addSub(w1)
dep.addSub(w2)
// 只要我们为Vue中data数据重新赋值以后，这个赋值的动作，会被Vue监听到，
// 然后vue要把数据的变化，通知每个订阅者
// 接下来，订阅者(DOM元素)要根据最新数据，更新自己的内容
dep.notify()
